package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import modelo.ModeloCategoria;
import modelo.ModeloCategoriaDAO;
import modelo.ModeloIngrediente;
import modelo.ModeloIngredienteDAO;
import modelo.ModeloProducto;
import modelo.ModeloProductoDAO;

import vista.VistaProducto;


public class ControladorProducto implements ActionListener{
	private VistaProducto vista;
	private ModeloProductoDAO modelo;
	private Vector<ModeloIngrediente> ingredientes;
	private Vector<ModeloCategoria> categorias;
	
	public static void main(String[] args) {
		new ControladorProducto();
	}
    

	public ControladorProducto() {
		this.vista = new VistaProducto();
		this.vista.setVisible(true);
		vista.addlistener(this);
		this.modelo = new ModeloProductoDAO();
		cargarTabla();
		cargarCombo();
	}
	private void cargarTabla() {
		DefaultTableModel m =(DefaultTableModel) vista.getTblIngrediente().getModel();	
		m.setRowCount(0);
		ingredientes = new ModeloIngredienteDAO().listar();
		Vector f;
		for (ModeloIngrediente modelo: ingredientes) {
			f = new Vector();
			f.add(modelo.getDescripcion());
			m.addRow(f);
		}
		
	}
	
	private void cargarCombo() {
		vista.getCmbcategoria().removeAllItems();
		categorias = new ModeloCategoriaDAO().listar();
		for (ModeloCategoria modelo: categorias) {
			vista.getCmbcategoria().addItem(modelo.getDescripcion());
		}
		
	}

	@Override
	public void actionPerformed(ActionEvent evt) {
		if(evt.getActionCommand().equals("Cancelar")){
			vista.limpiarCancelar();
		}
		else if(evt.getActionCommand().equals("Registrar")){
			if(!vista.getcodigo().isEmpty() && !vista.getprecio().isEmpty() && !vista.getprecio().isEmpty())
				if(vista.getModeloAgregados().getRowCount()>0){
					ModeloProducto m = new ModeloProducto();
					m.setCodigo(vista.getcodigo());
					m.setDescripcion(vista.getdescripcion());
					m.setStatus("A");
					m.setPrecio(Double.parseDouble(vista.getprecio()));
					m.setCod_categoria(buscarCategoria(vista.getcategoria()).getCodigo());
					if(modelo.registar(m)){
						Vector<String> v = new Vector<String>();
						Vector<Float> c = new Vector<Float>();
						DefaultTableModel model = vista.getModeloAgregados();
						int i =0;
						while(i<model.getRowCount()){
							v.add(buscarIngrediente((String)model.getValueAt(i, 0)).getCodigo());
							c.add((Float)model.getValueAt(i, 1));
							i++;
						}
						modelo.registarIngredientes(m,v, c);
						vista.limpiarCancelar();
						vista.mostrarMensaje("Producto registrado");
					}
					else
						vista.mostrarMensaje("Codigo registrado");
			}
				else
					vista.mostrarMensaje("Debe agregar ingredientes");
			else
				vista.mostrarMensaje("Campos vacios");
		
		}
		else if(evt.getActionCommand().equals("Agregar")){
			vista.agregar();
		}
		else if(evt.getActionCommand().equals("Quitar")){
			vista.quitar();
		
		}
		else if(evt.getActionCommand().equals("Salir")){
			vista.setVisible(false);
		
		}
		
		
	}
	
	public ModeloCategoria buscarCategoria(String descripicion){
        for (int i = 0; i < categorias.size(); i++)
            if(categorias.elementAt(i).getDescripcion().equals(descripicion))
                return categorias.elementAt(i);
        return null;
     }
     
     public ModeloIngrediente buscarIngrediente(String descripicion){
        for (int i = 0; i < ingredientes.size(); i++){
        	if(ingredientes.elementAt(i).getDescripcion().equals(descripicion))
                return ingredientes.elementAt(i);
        }return null;
     }  
	

}
